import java.util.HashMap;

//水果成篮
//测试链接 https://leetcode.cn/problems/fruit-into-baskets/description/
public class TotalFruit {
    /*
    本质：在数组中找出一个最长的连续的区域，使这个区域最多有两种类型的水果
    */
    public int totalFruit(int[] fruits) {
        HashMap<Integer,Integer> map = new HashMap<>();
        int left = 0, right = 0, n = fruits.length, ans = 1;

        while(right < n){
            int time = map.getOrDefault(fruits[right], 0);
            map.put(fruits[right], time+1); //进窗口

            //种类大于2
            while(map.size() > 2){ //出窗口
                int cnt = map.get(fruits[left]) - 1 ;
                if(cnt == 0){
                    map.remove(fruits[left]);
                }else{
                    map.put(fruits[left], cnt);
                }
                left++;
            }
            //更新结果
            ans = Math.max(ans,right - left + 1 );

            right++;
        }

        return ans;
    }
}
